<?php

/**
 * 自定义助手函数
 */

/**
 * 检查用户登录状态，未登录重定向到登录页面
 */
function login_check(string $message = '请先登录', string $status = 'error')
{
    if (false === session('user_id')) {
        $message ? flash($status, $message) : null;
        return redirect(url('/user/login'));
    }
}

/**
 * 获取用户头像
 */
function get_avatar(int $user_id)
{
    $avatars = [1,2,3,4,5,6,7,8,9,10,11,12];
    $hash        = abs(crc32($user_id));     // crc32是一个常见的哈希函数，这里取其绝对值以防得到负数
    $avatarIndex = $hash % 12;  // 取模确保索引在数组范围内
    $userAvatar  = $avatars[$avatarIndex] . '.png';

    return '/img/avatar/' . $userAvatar;
}

/**
 * 检查是否作者本人
 */
function is_author(int $user_id, int $url_id)
{
    return $user_id === $url_id;
}

/**
 * 是否管理员
 */
function is_admin()
{
    $userId = session('user_id');
    $user = model('user')::find($userId);
    return $userId === 1 && $user->group_id === 1;
}

/**
 * 返回缩略图路径，若无缩略图则返回原图路径
 *
 * @param  string $target_image 目标图片路径
 * @return string 返回缩略图或原图的路径
 */
function thumb(string $target_image): string
{
    $imgInfo = pathinfo($target_image);
    $thumbnailPath = "{$imgInfo['dirname']}/{$imgInfo['filename']}_thumb.{$imgInfo['extension']}";

    return is_file($thumbnailPath) ? $thumbnailPath : $target_image;
}

/**
 * 获取图片列表的HTML字符串
 *
 * @param int $imagesTotal 需要显示的图片总数
 * @param int $postId      帖子ID
 * @return string|bool 图片列表的HTML或false（如果没有图片或无效参数）
 */
function getImagesList(int $imagesTotal, int $postId, $thumb = true)
{
    // 调用模型方法获取图片列表
    $images = model('post')->getImagesList($postId);

    // 验证图片列表和图片总数
    if (empty($images) || $imagesTotal <= 0) {
        return false;
    }

    // 确保 $imagesTotal 不会超出图片列表的长度
    $imagesTotal = min($imagesTotal, count($images));

    // 初始化HTML字符串
    $html = '';

    // 循环遍历图片数组构建HTML
    for ($i = 0; $i < $imagesTotal; $i++) {
        $image = $images[$i];
        $thumbnail = thumb($image->filename);
        $fullImage = $image->filename;

        // 构建单张图片的HTML
        $singleImageHtml = sprintf(
            '<li class="col gx-1"><img class="feed-item-img" src="/%s" data-full="%s" alt="" loading="lazy" decoding="async"></li>',
            htmlspecialchars($thumbnail, ENT_QUOTES, 'UTF-8'),
            htmlspecialchars($fullImage, ENT_QUOTES, 'UTF-8')
        );

        $largeImageHtml = sprintf(
            '<li><img class="feed-item-img img-fluid rounded mb-3" src="/%s" alt="" loading="lazy" decoding="async" data-zoomable></li>',
            htmlspecialchars($fullImage, ENT_QUOTES, 'UTF-8')
        );

        if ($thumb) {
            // 追加到HTML字符串
            $html .= $singleImageHtml;
        } else {
            $html .= $largeImageHtml;
        }


    }

    // 返回构建好的HTML字符串
    return $html;
}

/**
 * 加载自定义 js 文件
 */
function assets_js(array $data)
{
    if ($data) {
        $array = array_map(function($value) {
            return '/js/' . $value;
        }, $data);

        foreach ($array as $value) {
            echo '<script src=' . $value . '></script>';
        }
    }
}

/**
 * 合并 js 文件
 */
function merge_js_files()
{
    $array = [
        'jquery.min.js',
        'bootstrap.bundle.min.js',
        'mini.js',
        'toast.js',
        'editor.min.js',
        'autosize.min.js',
        'gifffer.js',
    ];

    // 使用 array_map() 函数给数组的每个元素添加前缀
    $files = array_map(function($value) {
        return ROOT_PATH.'public/js/' . $value;
    }, $array);

    $merged_content = '';
    foreach ($files as $file) {
        $merged_content .= file_get_contents($file) . "\n";
    }

    $js_file = ROOT_PATH.'public/js/all.js';

    file_put_contents($js_file, $merged_content);
}